Computer applications continue to play an increasingly important role in the lives of individuals. Additionally, the desire by end-users for bigger, better and faster applications has also increased.
Unfortunately for application development teams, the applications have increased in complexity. As a result of this complexity, the time to develop applications has also increased. Unfortunately, the demand for bigger, better and faster applications is often manifested in demands that these new applications be provided to the market in ever shorter time frames.
As will be apparent, the market forces to develop bigger, better and faster applications in ever shorter times is in direct competition with the development teams' need for longer times to develop these same applications. Accordingly, tools to assist a developer or development teams in shortening the development cycle are desired.
One example of an application development tool is known in the art as computer code generators. These generators are used to generate source code which can then be compiled or interpreted as required by the operating environment.
As a result of the laborious nature of producing some code, code generators have been created. These code generators enable developers to spend more time on the operations which differentiate their applications from their competitors and less time writing code for common and relatively standard attributes/operations.
These automatic code generators, which often use a graphical or visual representation or model of the desired output, generate code based on the input data received (e.g., the model). For example, writing computer code for a graphical user interface (GUI) such as those common to most users of the Microsoft Windows operating system, is quite time consuming. To assist developers in generating the code for a GUI, automatic code generators have been created. These GUI code generators allow developers to work in a graphical development environment and select various user interface controls (e.g., radio buttons, drop down list boxes, selection boxes, etc.), typically using a “drag and drop” mechanism, and place the user interface controls in the graphical development environment representing a screen image to be presented to a user. When the developer has completed the graphical appearance, the developer instructs the development environment to generate the code which will implement the graphical representation created. The code generated may be in any language supported by the code generator (e.g., C, C++, Java™, etc.). As will be appreciated by those of ordinary skill in the art, the code actually generated include several files with each file having one or more sub-components. In structured languages, these sub-components may be reflected as functions, procedures, subroutines and the like. In object oriented languages these sub-components may include object classes, objects, fields, methods, method bodies and the like.
A further example of code generators are those used with Enterprise JavaBeans™ (“EJB”). EJBs are objects which, generally, describe some business logic. An automatic code generator, applied to the EJB generates source code objects for the particular environment for which the source code is being deployed. A single EJB input into a code generator may result in several object classes being generated (depending, for example, on the deployment environment and the bean type) with each object class describing one or more objects and each object including various fields, methods and method bodies.
Presently, code generators are provided to developers as a single application which generate code for each of the sub-components required based on the input provided. However, as can be appreciated, a single code generator often does not provide optimal code for each sub-component. Also, developers often find that a single generator generates certain blocks of code which is not appropriate for the environment in which the application (comprising the source code generated) is to be deployed. The blocks of code that are of relevance to the developer (i.e., those blocks of code which are inappropriate or unsatisfactory) are often generated by identifiable portions in the source code of the generator itself. Unfortunately, for the developer to identify these portions in the source code requires that the source to the code generator be provided to the developer. The provider of the code generator is often unwilling to provide the source code for a variety of reasons. This is an unsatisfactory situation from the developer's point of view.
Furthermore, existing code generators do not easily provide developers the ability to extend or modify the capabilities of the code generator unless the source code itself is extended or modified. As before, this is an unsatisfactory situation.
Accordingly, a code generator framework which addresses some of the difficulties in application development is desired.